package com.headwind.logistics.order.service.inter;

import com.headwind.logistics.common.pojo.GoodsIssueType;
import com.headwind.logistics.order.dto.OrderDto;
import com.headwind.logistics.order.entity.Order;
import com.headwind.logistics.order.entity.OrderCargo;
import com.headwind.logistics.order.entity.OrderServiceFee;
import com.headwind.logistics.order.entity.OrderTail;
import org.apache.ibatis.annotations.Param;
import org.json.JSONException;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * @Author 盛夏
 * @Date 2020-07-20 下午 8:18
 * @Version 1.0
 * @DESCRIPTION 订单业务逻辑层接口
 */
public interface OrderServiceInter {

    /**
     * 保存订单
     * @param beginBranch   开始网点
     * @param endBranch     目的网点
     * @param courierOdd    快递单号
     * @param session       作用域
     * @param cargoJson     货物数据
     * @param costJson      费用数据
     * @return              状态码
     */
    int addOrder(int beginBranch, int endBranch, String courierOdd, HttpSession session, String planOrder,
                 String cargoJson, String costJson) throws JSONException;

    /**
     * 查询所有异常分类
     * @return 异常类型集合
     */
    List<GoodsIssueType> queryGoodsIssueType();

    /**
     * 根据面单号范围查订单
     * @param expressGrantStartNum  开始单号
     * @param expressGrantEndNum    结束单号
     * @return  订单传输对象类集合
     */
    List<OrderDto> queryOrderByExpressGrantOdd(String expressGrantStartNum,String expressGrantEndNum);

    /**
     * 订单分页查询
     * @return
     */
    List<OrderDto> queryOrderByPage(Integer page,Integer limit,Long empId);

    /**
     * 查询所有定单数量
     * @return
     */
    int queryOrderCount();

    /**
     * 根据订单号查订单费用
     * @param orderOdd  订单号
     * @return          订单费用
     */
    List<OrderDto> queryServiceFeeByOrderOdd(String orderOdd);

    /**
     * 通过订单编号得到订单主键后查询订单追踪表
     * @param orderOdd  订单编号
     * @return          订单追踪集合
     */
    List<OrderTail>  queryOrderTailByOrderId(String orderOdd);

    /**
     * 逻辑删除（如果是超级管理就删除否则就修改状态）
     * @param orderOdd
     * @param session
     * @return
     */
    int loginDeleteOrder(String orderOdd,HttpSession session);
}
